package Auxiliar;

import Simulador.Event.Evento;

/**
 *
 * @author A
 */
public class FilaEventos extends Fila {

    public FilaEventos() {
        super();
    }

    @Override
    public void addItem(Object Obj) {//arrumar metodo!
        if(Obj == null){
            System.out.println("Erro - addItem() - Obj = null");
        }
        if( !(Obj instanceof Evento) ){
            System.out.println("Erro - addItem() - FilaEventos");
            return;
        }

        float tempoNovo = ((Evento)Obj).getMomentoDeChegada();
        Item itemNovo = new Item(Obj);
        
        Item anterior=head, posterior=head;
        
        //Fila Vazia
        if(head == null){
            head = itemNovo;
            tail = itemNovo;
            //System.out.println("Add Evento tipo C");
        }else{
            while( ((Evento)posterior.getObject()).getMomentoDeChegada() <= tempoNovo && posterior.next != null){
                anterior = posterior;
                posterior = posterior.next;
            }
            
            if(posterior.next == null && ((Evento)posterior.getObject()).getMomentoDeChegada() <= tempoNovo){
                posterior.next = itemNovo;
                tail = itemNovo;
                return;
            }
            
            if(anterior == head && ((Evento)anterior.getObject()).getMomentoDeChegada() >= tempoNovo){
                itemNovo.setNext(head);
                head = itemNovo;
                //System.out.println("Add Evento tipo A");
            }
            else{
                anterior.setNext(itemNovo);
                itemNovo.setNext(posterior);
                //System.out.println("Add Evento tipo B");
            }
        }
    }
}
